/**
 * node 中常用的模块分为三种
 *  1. 内置模块 (也叫核心模块)
 *  2. 文件模块. 自己写的文件, 自己使用.
 *  3. 第三方模块. 别人写好的, 用的时候, 先下载, 再使用, 使用方式和内置模块一样.
 */

// node中常用的几个核心模块:  fs path vm

  // fs 内部一般有两种 api ,同步, 和异步的两种 api
  // 浏览器取文件需要发请求, node中 require 有读取文件的功能.

  //注意:  require 方法是 同步的.
const fs = require("fs")

// 同步会阻塞, 但是当代码执行前, 我都可以采用同步的方式.
// 在读取文件之前, 目录可能不存在,
// 判断文件是否存在
// let isExists = fs.existsSync("note.md") // 判断文件是否存在
// let data = fs.readFileSync("note.md", "utf8");
// console.log(data);


let path = require('path') // 路径处理模块
// join 只拼接目录
console.log(path.join("a", "//b", "c"));

// resolve 也具备路径拼接功能,但是它最终出来的结果是一个绝对路径
// path.resolve 默认以当前路径解析成绝对路径
console.log(path.resolve("a", "b", "c"));

// path.resolve 遇到 / 表示回到根路径.
console.log(path.resolve("a", "/b"));  //=> D:\b

/**
 * path.resolve 和 path.join 区别
 * 主要看路径中有没有 / ,比如上面的 "/b",带有斜杠,resolve会回到根路径 /b下, 其他情况下两个结果一样.
 */


// 用路径做减法, 取 name
console.log(path.basename("a.js", ".js"));

console.log(path.extname("a.js")); // 取最后一个后缀名
console.log(path.relative("a/b/c", "c")); // 获取当前的相对路径

// path.dirname  === __dirname 内部的 __dirname就是这样产生的
console.log(path.dirname(__filename));


const vm = require("vm")// 可以让一个字符串执行.
global.a =100;
vm.runInNewContext('console.log(123345346)')

// 让字符串执行  eval, new Function
// eval 执行的时候, 会采用上级的变量.
